package com.whfc.mach.service;

import com.whfc.common.exception.BizException;
import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.entity.dto.Apply.req.EquipmentIdReq;
import com.whfc.fuum.entity.WxUser;
import com.whfc.mach.MachOilAddDel;
import com.whfc.mach.dto.*;
import com.whfc.mach.entity.AppMach;
import com.whfc.mach.entity.AppMachDay;
import com.whfc.mach.param.*;
import org.jboss.logging.Param;

import java.util.Date;
import java.util.List;

/**
 * @author qzexing
 * @version 1.0
 * @date 2020-11-06 15:52
 */
public interface AppMachService {

    /**
     * 添加设备
     *
     * @param param
     * @return
     * @throws BizException
     */
    Integer add(MachAddParam param) throws BizException;

    /**
     * 小程序添加并绑定设备
     *
     * @param wxUser
     * @param param
     * @throws BizException
     */
    void addWxMach(WxUser wxUser, WxMachAddParam param) throws BizException;

    /**
     * 编辑设备
     *
     * @param param
     * @throws BizException
     */
    void edit(MachEditParam param) throws BizException;

    /**
     * 编辑设备油箱
     *
     * @param param
     * @throws BizException
     */
    void editMachTank(MachTankEditParam param) throws BizException;

    /**
     * 导出设备信息
     *
     * @param deptIds
     * @return
     * @throws BizException
     */
    String export(List<Integer> deptIds) throws BizException;

    /**
     * 导出电力设备信息
     *
     * @param deptIds
     * @return
     * @throws BizException
     */
    String exportObd(List<Integer> deptIds) throws BizException;

    /**
     * 设备和硬件解绑
     *
     * @param userId
     * @param userName
     * @param machId
     * @throws BizException
     */
    void unbindMachDevice(Integer userId, String userName, Integer machId) throws BizException;

    /**
     * 设备绑定
     *
     * @param param
     */
    void bindMachDevice(DeviceMachBindParam param) throws BizException;

    /**openApi调用接口*/

    /**
     * 开放平台获取设备列表(分页)
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<OpenApiMachDTO> openApiMachList(Integer deptId, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 开放平台获取设备列表(不分页)
     *
     * @param deptId
     * @return
     */
    List<OpenApiMachDTO> openApiMachList(Integer deptId) throws BizException;

    /**
     * 开放平台获取单台设备信息
     *
     * @param machId
     * @return
     */
    OpenApiMachDTO openApiMachDetail(Integer machId) throws BizException;

    /**
     * 开放平台查询设备每日工时
     *
     * @param machId
     * @param date
     * @return
     */
    AppMachWorkHourDayDTO openApiMachWorkHour(Integer machId, Date date) throws BizException;

    /**
     * 开放平台查询设备每日油耗
     *
     * @param machId
     * @param date
     * @return
     */
    OpenApiOilWearDTO openApiMachOilWear(Integer machId, Date date) throws BizException;

    /**
     * 设备进场
     *
     * @param param
     */
    void enter(MachEnterParam param) throws BizException;

    /**
     * 设备退场
     *
     * @param param
     */
    void outer(MachEnterParam param) throws BizException;

    /**
     * 删除设备
     *
     * @param machId
     * @throws BizException
     */
    void del(Integer machId) throws BizException;

    /**
     * 查询设备类型列表
     *
     * @param deptIds
     * @return
     * @throws BizException
     */
    ListData<AppMachTypeDTO> machTypeList(List<Integer> deptIds) throws BizException;

    /**
     * 验证硬件是否被绑定
     *
     * @param deviceId
     * @return
     * @throws BizException
     */
    Boolean bindCheck(Integer deviceId) throws BizException;

    /**
     * 标定设备加油量
     *
     * @param param
     * @throws BizException
     */
    @Deprecated
    void setOilAdd(MachSetOilAddParam param) throws BizException;

    /**
     * 获取标定加油量详情
     *
     * @param machId
     * @param date
     * @return
     * @throws BizException
     */
    @Deprecated
    ListData<MachOilAdd> getOilAdd(Integer machId, Date date) throws BizException;

    /**
     * 查询项目的加油记录
     *
     * @param deptId
     * @param startDate
     * @param endDate
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @return
     * @throws BizException
     */
    PageData<AppMachOilRecordDTO> getOilRecordList(Integer deptId, Date startDate, Date endDate, String keyword, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 获取设备的加油记录
     *
     * @param machId
     * @param startDate
     * @param endDate
     * @param pageNum
     * @param pageSize
     * @return
     * @throws BizException
     */
    PageData<AppMachOilRecordDTO> getOilRecordList(Integer machId, Date startDate, Date endDate, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 加油记录-人工登记
     *
     * @param param
     * @throws BizException
     */
    void addOilManual(MachOilAddManual param) throws BizException;

    /**
     * 加油记录-硬件校正
     *
     * @param param
     * @throws BizException
     */
    void addOilAdjust(MachOilAddAdjust param) throws BizException;

    /**
     * 加油记录-删除
     *
     * @param param
     * @throws BizException
     */
    void delOilRecord(MachOilAddDel param) throws BizException;

    /**
     * 查找设备信息
     *
     * @param machIds
     * @return
     * @throws BizException
     */
    List<AppMachDTO> getMachListByIds(List<Integer> machIds) throws BizException;
    /**
     * 查找设备信息
     *
     * @param machId
     * @return
     * @throws BizException
     */
    AppMach getMachById(Integer machId) throws BizException;

    /**
     * 根据组织机构获取设备列表
     *
     * @param deptId
     * @return
     * @throws BizException
     */
    List<AppMachDTO> getMachListByDeptId(Integer deptId) throws BizException;

    /**
     * 获取设备ids
     *
     * @param snList
     * @return
     * @throws BizException
     */
    List<Integer> getMachIds(List<String> snList) throws BizException;

    /**
     * 验证组织机构是否拥有该设备
     *
     * @param deptId 组织机构ID
     * @param machId 设备ID
     * @return 设备基本信息
     * @throws BizException 业务异常
     */
    boolean validDeptMachId(Integer deptId, Integer machId) throws BizException;

    /**
     * 给设备发送指令
     *
     * @param cmdParam
     * @throws BizException
     */
    void sendMachCmd(MachCmdParam cmdParam) throws BizException;


    List<AppMachDay> selectByPrimaryKey(List<String> ids) throws BizException;

    List<AppMach> selectByMach(List<String> ids) throws BizException;

    /**
     * 查询项目下的设备
     *
     * @param deptId
     * @throws BizException
     */
    List<AppMach> selectByPrimaryKey(Integer deptId);

    /**
     * 查询设备清单
     *
     * @param equipmentId
     * @throws BizException
     */
    List<AppMach> selectEquipmentList(EquipmentIdReq req);

}
